package com.zz.dao;

import com.zz.pojo.Patient;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * Copyright Zz
 * FileName: PatientDao
 * Author:   Zz
 * Date:     2023/6/323:44
 * Description:病人在院表Dao层
 * hISTORY:
 * <author>  <time>     <version>    <desc>
 * 作者姓名   修改时间       版本号       描述
 */
@Mapper
@Repository
public interface PatientDao {
    /**
     * 查找在院表中的所有信息
     * @return 所有在院的病人记录
     */
    List<Patient> queryPatientList();

    /**
     * @param patientID 身份证号
     * @return 指定身份证号的病人信息
     */
    Patient queryPatientByID(@Param("ID") String patientID);

    /**
     * 分页查询在院病人信息(以入住时间降序排序)
     * @param map startIndex:分页起始位置,pageSize:返回页面大小（也即数据长度）
     * @return 以入住时间降序排序的在院病人信息
     */
    List<Patient> queryPatientListOrderByTime(Map<String,Integer> map);

    /**
     * 查询目前在院总人数
     * @return 返回目前在院病人数量
     */
    int countPatientNumber();

    /**
     * number: 1-id 2-姓名 3-性别 4-年龄 5-入住时间 6-病因 7-床,根据number动态sql查询
     * @param map number:查询方式，name查询关键词，startIndex:分页起始位置,pageSize:返回页面大小（也即数据长度）
     * @return 以指定查询方式查询在院病人信息(模糊查询)
     */
    List<Patient> queryPatientListByNumber(Map <String, Object> map);

    /**
     *  查询符合条件的人数
     * @param map number 1-id 2-姓名 3-性别 4-年龄 5-入住时间 6-病因 7-床,根据number动态sql查询
     * @return 符号条件的人数
     */
    int countPatientByNumber(Map <String, Object> map);


    /**
     * 病人住院
     * @param patient 新的入住病人
     * @return 入院是否成功（1成功，0失败）
     */
    int insertPatient(Patient patient);

    /**
     * 出院时删除在院表信息
     * @param ID 身份证号
     * @return 删除记录条数
     */
    int deletePatient(@Param("ID") String ID);

    /**
     * 更新在院病人信息
     * @param patient 病人信息
     * @return 修改记录条数 1-成功 0-失败
     */
    int updatePatient(Patient patient);

}
